<?php

include_once 'TOAutor.php';
include_once 'TOEditora.php';
include_once 'TOCategoria.php';
include_once 'TOLivro.php';
include_once 'Mensagem.php';
include_once 'ExceptionValidacao.php';

/**
 * A Facade é o ponto único de entrada para a lógica do sistema.
 */
class Facade extends CI_Model {

    /**
     * Retorna <b>Lista</b> de autores de acordo com a solicitação da paginação
     * @param type $init
     * @param type $quant
     * @return TOAutor 
     */
    function selectAutores($init, $quant) {
        $this->load->model('DAOAutor');
        return $this->DAOAutor->get_all($init, $quant);
    }

    /**
     * Insere um novo autor
     */
    function insertAutor() {
        $autor = new TOAutor();
        $autor->nome = $this->input->post('nome', TRUE);

        $this->load->model('DAOAutor');
        $this->DAOAutor->insert($autor);
    }

    /**
     * Atualiza dados do autor
     */
    function updateAutor() {
        $autor = new TOAutor();
        $autor->codigo = $this->input->post('codigoUp', TRUE);
        $autor->nome = $this->input->post('nomeUp', TRUE);

        $this->load->model('DAOAutor');
        $this->DAOAutor->update($autor);
    }

    /**
     * Exclui autor
     */
    function deleteAutor() {
        $autor = new TOAutor();
        $autor->codigo = explode(',', $this->input->post('codigo', TRUE));
        $autor->nome = $this->input->post('nome', TRUE);

        $this->load->model('DAOAutor');
        $this->DAOAutor->delete($autor);
    }

    /**
     * <b>Busca</b> autor pelo termo passado
     * @param type $init
     * @param type $quant
     * @param type $term
     * @return type 
     */
    function searchAutor($init, $quant, $term) {
        $this->load->model('DAOAutor');
        return $this->DAOAutor->search($init, $quant, $term);
    }

    /**
     * Verifica na sessão se existe um termo de busca
     * @param string $searchterm
     * @return string 
     */
    function searchtermHandler($searchterm) {
        if ($searchterm) {
            $this->session->set_userdata('searchterm', $searchterm);
            return $searchterm;
        } elseif ($this->session->userdata('searchterm')) {
            $searchterm = $this->session->userdata('searchterm');
            return $searchterm;
        } else {
            $searchterm = "";
            return $searchterm;
        }
    }

    /**
     * Retorna o <b>total</b> de registros da busca pelo autor.
     * @param string $term
     * @return type 
     */
    function quantSearchAutor($term) {
        $this->load->model('DAOAutor');
        return $this->DAOAutor->quant_search($term);
    }

    /**
     * Retorna o <b>total</b> de registros de autores cadastrado.
     * @return type 
     */
    function quantAutor() {
        $this->load->model('DAOAutor');
        return $this->DAOAutor->quant_all();
    }

    /**
     * Retorna Lista de <b>editoras</b> de acordo com a solicitação da paginação
     * @param type $init
     * @param type $quant
     * @return TOEditora objeto editora
     */
    function selectEditoras($init, $quant) {
        $this->load->model('DAOEditora');
        return $this->DAOEditora->get_all($init, $quant);
    }

    /**
     * Retorna o total de registros da tabela editora.
     * @return string total de registros
     */
    function quantEditora() {
        $this->load->model('DAOEditora');
        return $this->DAOEditora->quant_all();
    }

    /**
     * <b>Insere</b> uma nova editora.
     */
    function insertEditora() {
        $editora = new TOEditora();
        $editora->nome = $this->input->post('nome', TRUE);
        $editora->telefone = $this->input->post('telefone', TRUE);
        $editora->email = $this->input->post('email', TRUE);
        $editora->site = $this->input->post('site', TRUE);

        $this->load->model('DAOEditora');
        $this->DAOEditora->insert($editora);
    }

    /**
     *  <b>Atualiza</b> dados da editora
     */
    function updateEditora() {
        $editora = new TOEditora();
        $editora->codigo = $this->input->post('codigoUp', TRUE);
        $editora->nome = $this->input->post('nomeUp', TRUE);
        $editora->telefone = $this->input->post('telefoneUp', TRUE);
        $editora->email = $this->input->post('emailUp', TRUE);
        $editora->site = $this->input->post('siteUp', TRUE);

        $this->load->model('DAOEditora');
        $this->DAOEditora->update($editora);
    }

    /**
     * <b>Exclui</b> uma editora. 
     */
    function deleteEditora() {
        $editora = new TOEditora();
        $editora->codigo = explode(',', $this->input->post('codigo', TRUE));
        $editora->nome = $this->input->post('nome', TRUE);

        $this->load->model('DAOEditora');
        $this->DAOEditora->delete($editora);
    }

    /**
     * <b>Busca</b> editora pelo termo passado
     * @param type $init
     * @param type $quant
     * @param type $term
     * @return type 
     */
    function searchEditora($init, $quant, $term) {
        $this->load->model('DAOEditora');
        return $this->DAOEditora->search($init, $quant, $term);
    }

    /**
     * Retorna o <b>total</b> de registros da busca pela editora.
     * @param type $term
     * @return type 
     */
    function quantSearchEditora($term) {
        $this->load->model('DAOEditora');
        return $this->DAOEditora->quant_search($term);
    }

    /**
     * Retorna <b>Lista</b> de categorias de acordo com a solicitação da paginação
     * @param type $init
     * @param type $quant
     * @return TOAutor 
     */
    function selectCategorias($init, $quant) {
        $this->load->model('DAOCategoria');
        return $this->DAOCategoria->get_all($init, $quant);
    }

    /**
     * Retorna o total de registros da tabela editora.
     * @return string total de registros
     */
    function quantCategoria() {
        $this->load->model('DAOCategoria');
        return $this->DAOCategoria->quant_all();
    }

    /**
     * <b>Insere</b> uma nova categoria.
     */
    function insertCategoria() {
        $categoria = new TOCategoria();
        $categoria->nome = $this->input->post('nome', TRUE);
        $categoria->descricao = $this->input->post('descricao', TRUE);
        $categoria->sequencia = $this->input->post('sequencia', TRUE);
        $categoria->status = $this->input->post('status', TRUE);

        $this->load->model('DAOCategoria');
        $this->DAOCategoria->insert($categoria);
    }

    /**
     *  <b>Atualiza</b> dados da categoria
     */
    function updateCategoria() {
        $categoria = new TOCategoria();
        $categoria->codigo = $this->input->post('codigoUp', TRUE);
        $categoria->nome = $this->input->post('nomeUp', TRUE);
        $categoria->descricao = $this->input->post('descricaoUp', TRUE);
        $categoria->sequencia = $this->input->post('sequenciaUp', TRUE);
        $categoria->status = $this->input->post('statusUp', TRUE);

        $this->load->model('DAOCategoria');
        $this->DAOCategoria->update($categoria);
    }

    /**
     * <b>Exclui</b> uma categoria.
     */
    function deleteCategoria() {
        $categoria = new TOCategoria();
        $categoria->codigo = explode(',', $this->input->post('codigo', TRUE));
        $categoria->nome = $this->input->post('nome', TRUE);

        $this->load->model('DAOCategoria');
        $this->DAOCategoria->delete($categoria);
    }

    /**
     * Retorna o <b>total</b> de registros da busca pela categoria.
     * @param type $term
     * @return type 
     */
    function quantSearchCategoria($term) {
        $this->load->model('DAOCategoria');
        return $this->DAOCategoria->quant_search($term);
    }

    /**
     * <b>Busca</b> editora pelo termo passado
     * @param type $init
     * @param type $quant
     * @param type $term
     * @return type 
     */
    function searchCategoria($init, $quant, $term) {
        $this->load->model('DAOCategoria');
        return $this->DAOCategoria->search($init, $quant, $term);
    }
    
    /**
     * <b>Busca</b> editora pelo termo passado
     * @param type $init
     * @param type $quant
     * @param type $term
     * @return type 
     */
    function searchCategoriaNome() {
        $term = $this->input->post('term');
        $this->load->model('DAOCategoria');
        return $this->DAOCategoria->searchCategoriaNome($term);
    }

    /**
     * Retorna <b>Lista</b> de livros de acordo com a solicitação da paginação
     * @param type $init
     * @param type $quant
     * @return TOLivro 
     */
    function selectLivros($init, $quant) {
        $this->load->model('DAOLivro');
        return $this->DAOLivro->get_all($init, $quant);
    }
    
    /**
     * Retorna <b>Dados</b> de um livro  de acordo com seu codigo
     * @param type $codigo
     * @return TOAutor 
     */
    function getLivro($codigoItem) {
       $livro = new TOLivro();
       $livro->codigo = $codigoItem;
       $this->load->model('DAOLivro');
       return $this->DAOLivro->get($livro);
    }
    
    /**
     * Retorna o total de registros da tabela editora.
     * @return string total de registros
     */
    function quantLivro() {
        $this->load->model('DAOLivro');
        return $this->DAOLivro->quant_all();
    }
    
    /**
     * Retorna <b>Preço</b> de um item de acordo com seu codigo
     * @param type $codigo
     * @return TOAutor 
     */
    function getPreco($codigoItem) {
       $this->load->model('DAOPreco');
       return $this->DAOPreco->get($codigoItem);
    }
    
    /**
     * Retorna o total de vendas de um determinado item.
     * @return string total de registros
     */
    function quantVendas($codigo) {
        $this->load->model('DAOVenda');
        return $this->DAOVenda->quant_get($codigo);
    }

    /**
     * Retorna <b>Preço</b> de um item de acordo com seu codigo
     * @param type $codigo
     * @return TOAutor 
     */
    function getVendas($codigoItem, $init, $quant) {
       $this->load->model('DAOVenda');
       return $this->DAOVenda->get($codigoItem, $init, $quant);
    }
//    
//    /**
//     * Verifica na sessão se existe código do item que estar selecionado
//     * @param string $searchterm
//     * @return string 
//     */
//    function codigoItemVez($codigo) {
//        if ($codigo) {
//            $this->session->set_userdata('codigoItem', $codigo);
//            return $codigo;
//        } elseif ($this->session->userdata('codigoItem')) {
//            $searchterm = $this->session->userdata('codigoItem');
//            return $codigo;
//        } else {
//            $codigo = "";
//            return $codigo;
//        }
//    }
    
    
    /**
     * Retorna <b>Emprestimos</b> de um item de acordo com seu codigo
     * @param type $codigo
     * @return TOAutor 
     */
    function getEmprestimos($codigoItem, $init, $quant) {
       $this->load->model('DAOEmprestimo');
       return $this->DAOEmprestimo->get($codigoItem, $init, $quant);
    }

}